<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    
  </style>
</head>
<body>
  
</body>
<script>

  // 死递归
  // function fn(){
  //   console.log(1)
  //   fn();
  // }
  // fn();

  // 死循环
  // while(true){
  //   console.log(1)
  // }


  // 计算：5! = 5 * 4 * 3 * 2 * 1
  // 封装函数，使用递归的思想，计算n的阶乘
  // 5! = 5 * 4!
  //         4 * 3!
  //             3 * 2!
  //                 2 * 1!
  //                     1
  // 计算阶乘
  // 阶乘功能，就是要重复执行的功能
  // 假设：封装好了计算阶乘的功能：fn(5)，5的阶乘
  // fn(5) = 5 * fn(4)
  //               4 * fn(3)
  //                     3 * fn(2)
  //                           2 * fn(1)
  //                                 1

  // fn(n) = n * fn(n-1)

  // 递的终点，归的起点：1
  // fn(1) = 1

  // 递归计算阶乘
  // function fn(n){
  //   if(n === 1){
  //     return 1;
  //   }
  //   return n * fn(n-1);
  // }
  // console.log(fn(5));

  // 循环计算阶乘
  // function fn(n){
  //   var sum = 1;
  //   for(var i=1;i<=n;i++){
  //     sum *= i
  //   }
  //   return sum;
  // }
  // console.log(fn(5));

  // ========

  // 1，1，2，3，5，8，13，...
  // 计算第n位是多少

  // 假设已经封装了一个功能fn可以计算任意位数的斐波那契数列

  // fn(5) = fn(4) + fn(3)

  // fn(4) = fn(3) + fn(2)

  // fn(3) = fn(2) + fn(1)

  // 递的终点，归的起点
  // fn(2) = 1
  // fn(1) = 1

  // function fn(n){
  //   if(n === 1 || n === 2){
  //     return 1;
  //   }
  //   return fn(n-1) + fn(n-2);
  // }

  // console.log( fn(10) )

  // ========

  // 封装函数，传入一个整数，根据奇偶，偶数：1/2 + 1/4 + ... + 1/n；
  // 奇数：1 + 1/3 + ... + 1/n

  // 假设已经封装了一个功能fn，可以计算如题所示需求

  // 偶数：6
  // fn(6) = 1/6 + fn(4)
  // fn(4) = 1/4 + fn(2)
  // fn(2) = 1/2

  // 公式：fn(n) = 1/n + fn(n-2)
  // 终点和起点：fn(2) = 1/2


  // 奇数：7
  // fn(7) = 1/7 + fn(5)
  // fn(5) = 1/5 + fn(3)
  // fn(3) = 1/3 + fn(1)

  // 公式：fn(n) = 1/n + fn(n-2)
  // 终点和起点：fn(1) = 1

  // function fn(n){
  //   if(n === 1){
  //     return 1;
  //   }
  //   if(n === 2){
  //     return 1/2;
  //   }
  //   return 1/n + fn(n-2);
  // }

  // console.log( fn(6) );
  // console.log( fn(7) );






  
</script>
</html>